home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / basic / apb17.zip / MOUSEI.ASM < prev    next >
Assembly Source File  |  1990-12-20  |  3KB  |  136 lines

  1.     Title Mouse routines for ApBasic
  2.     Page 60,130
  3. ;    Created 11-12-1987 k. murray
  4. ;
  5. Comment *
  6.     These routines allow interrupt driven mouse control.
  7.     The subprograms are defined as:
  8.  
  9.     SUB SetMouseTrap CondMask%,TrapNo% External "MouseI.Com"
  10.     SUB ResetMouseTrap External "" 3
  11.     SUB GetMouseInfo CondMask%,Hpos%,Vpos%,Buttons% External "" 6
  12.  
  13.     Updates:
  14.         None.
  15. *
  16. Cseg    Segment byte public 'Code'
  17.     Assume Cs:Cseg,Ds:nothing,Es:nothing
  18. Start:
  19.     Jmp    SetMouseTrap    ; set a trap for mouse interrupt
  20.     Jmp    near ptr ResetMouseTrap    ; reset mouse trap
  21.     Jmp    GetMouseInfo    ; get info returned from trap
  22. ;
  23. ; Some data locations
  24. ProgDs    Dw    0        ; Program's Data segment for int routine
  25. TrapMask Dw    0,0        ; mask to use on trap doubleword
  26. RT_CondMask Dw    0        ; Returned condition mask
  27. RT_HPos    Dw    0        ; Returned horizontal position
  28. RT_VPos Dw    0        ; Returned vertical position
  29. RT_Buttons Dw    0        ; Returned buttons status
  30. ;
  31. Comment *
  32.     SUB GetMouseInfo CondMask%,Hpos%,Vpos%,Buttons%
  33.     Stack frame:
  34.     Bp+12    CondMask%
  35.     Bp+10    Hpos%
  36.     Bp+8    Vpos%
  37.     Bp+6    Buttons%
  38. *
  39. GetMouseInfo proc far
  40.     Push    Bp
  41.     Mov    Bp,Sp
  42.     Mov    Ax,Cs:RT_CondMask
  43.     Mov    Bx,[Bp+12]
  44.     Mov    [Bx],Ax
  45.     Mov    Ax,Cs:RT_HPos
  46.     Mov    Bx,[Bp+10]
  47.     Mov    [Bx],Ax
  48.     Mov    Ax,Cs:RT_VPos
  49.     Mov    Bx,[Bp+8]
  50.     Mov    [Bx],Ax
  51.     Mov    Ax,Cs:RT_Buttons
  52.     Mov    Bx,[Bp+6]
  53.     Mov    [Bx],Ax
  54.     Pop    Bp
  55.     Ret    4*2            ; remove 4 parameters
  56. GetMouseInfo endp
  57. ;
  58. ;
  59. Comment *
  60.     SUB SetMouseTrap CondMask%, TrapNo%
  61.     Stack frame:
  62.     Bp+8    CondMask%
  63.     Bp+6    TrapNo% adr.
  64.     Bp+4    Return segment
  65.     Bp+2    Return offset
  66.     Bp+0    Saved Bp
  67. *
  68. SetMouseTrap Proc Far
  69.     Push    Bp
  70.     Mov    Bp,Sp
  71.     Mov    Cs:ProgDs,Ds        ; save program Ds
  72.     Mov    Bx,[Bp+6]        ; Get user number adr.
  73.     Mov    Cx,[Bx]            ; Get user number
  74.     Dec    Cx            ; make relative to zero
  75.     Cmp    Cx,32
  76.     Jb    SetMouse2
  77.     Mov    Cx,32            ; use smallest
  78. SetMouse2:
  79.     Xor    Ax,Ax
  80.     Mov    Dx,Ax
  81.     Inc    Ax            ; set low bit
  82.     Clc                ; clear carry
  83.     Jcxz    SetMouse6
  84. SetMouse4:
  85.     Rcl    Ax,1
  86.     Rcl    Dx,1            ; shift dword over one bit
  87.     Loop    SetMouse4
  88. SetMouse6:
  89.     Mov    Cs:TrapMask,Ax
  90.     Mov    Cs:TrapMask+2,Dx    ; save trap mask
  91.     Mov    Bx,[Bp+8]
  92.     Mov    Cx,[Bx]            ; get condition mask in Cx
  93.     Push    Cs
  94.     Pop    Es
  95.     Mov    Dx,offset MouseTrap    ; Es:Dx=adr. of moust trap routine
  96.     Mov    Ax,12
  97.     Int    33h            ; set calling routine
  98.     Pop    Bp
  99.     Ret    2*2            ; remove 2 parameters
  100. SetMouseTrap Endp
  101. ;
  102. ;    Mouse call will be set to this routine
  103. MouseTrap Proc Far
  104.     Push    Ds
  105.     Push    Cs
  106.     Pop    Ds
  107. Assume Ds:Cseg
  108.     Mov    RT_CondMask,Ax
  109.     Mov    RT_Buttons,Bx
  110.     Mov    RT_Hpos,Cx
  111.     Mov    RT_Vpos,Dx        ; save status
  112.     Mov    Ax,TrapMask
  113.     Mov    Dx,TrapMask+2
  114.     Mov    Ds,ProgDs
  115.     Or    Ds:[0],Ax
  116.     Or    Ds:[2],Dx        ; set trap bit
  117.     Pop    Ds
  118. Assume Ds:Nothing
  119.     Ret
  120. MouseTrap Endp
  121. ;
  122. ;    SUB ResetMouseTrap
  123. ResetMouseTrap proc far
  124.     Push    Bp
  125.     Mov    Bp,Sp
  126.     Mov    Ax,12
  127.     Xor    Cx,Cx
  128.     Int    33h            ; set calling routine with not conditions
  129.     Pop    Bp
  130.     Ret
  131. ResetMouseTrap endp
  132. ;
  133. ;
  134. Cseg    Ends
  135.     End    Start
  136.